package leetcode_jz_offer.day7_bin_tree;

/**
 * 请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的
 **/

/**
 * 对称二叉树左右子树存在镜像关系，只要两棵子树镜像相等，则对称（只需要判断根节点是否相等，左.left==右.right,左.right==右.left即可）
 */
public class Num28_对称二叉树 {
    public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
  }
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return isMirror(root.left,root.right);
    }
    //判断这两个左右子树是否镜像相等
    private boolean isMirror(TreeNode left, TreeNode right) {
        if(left==null&&right==null){
            return true;
        }
        if(left==null||right==null){
            return false;
        }
        if(left.val!=right.val){//左子树根节点和右子树根节点
            return false;
        }
        //结点相等，继续向下遍历判断左子树的左右子树分别与右子树的右左子树是否镜像相等
        return isMirror(left.left,right.right)&&isMirror(left.right,right.left);
    }
}
